// pages/mine/mine.js
var esc = require("../../utils/esc.js");
var app = getApp();
// ArrayBuffer转16进度字符串示例
function ab2hex(buffer) {
  var hexArr = Array.prototype.map.call(new Uint8Array(buffer), function (bit) {
    return ("00" + bit.toString(16)).slice(-2);
  });
  return hexArr.join("");
}
Page({
  /**
   * 页面的初始数据
   */
  // 根据 shopPosition 获取店铺名称
  data: {
    shopPosition: "-1",
    shopPositionStr: "请选择店铺",
    looptime: 0,
    currentTime: 1,
    lastData: 0,
    oneTimeData: 0,
    buffSize: [],
    buffIndex: 0, //发送字节数下标
    printNum: [],
    printNumIndex: 0,
    printerNum: 1,
    currentPrint: 1,
    isReceiptSend: false,
    isQuery: false,
  },

  // 清除所有缓存并跳转到首页

  clearData: function () {
    wx.showLoading({
      title: "清除中",
    });
    wx.clearStorage(); // 清除所有本地存储数据
    setTimeout(() => {
      wx.reLaunch({
        url: "/pages/order/order", // 跳转到首页
      });
      wx.hideLoading();
    }, 500);
  },
  goBLue: function () {
    wx.navigateTo({
      url: "/pages/bleConnect/bleConnect",
    });
  },
  queryStatus: function () {
    //查询打印机状态
    var that = this;
    var buf;
    var dateView;
    /*
    n = 1：传送打印机状态
    n = 2：传送脱机状态
    n = 3：传送错误状态
    n = 4：传送纸传感器状态
    */
    buf = new ArrayBuffer(3);
    dateView = new DataView(buf);
    dateView.setUint8(0, 16);
    dateView.setUint8(1, 4);
    dateView.setUint8(2, 2);
    wx.writeBLECharacteristicValue({
      deviceId: app.BLEInformation.deviceId,
      serviceId: app.BLEInformation.writeServiceId,
      characteristicId: app.BLEInformation.writeCharaterId,
      value: buf,
      success: function (res) {
        console.log("发送成功");
        that.setData({
          isQuery: true,
        });
      },
      fail: function (e) {
        //console.log(e)
        return;
      },
      complete: function () {},
    });

    wx.notifyBLECharacteristicValueChange({
      deviceId: app.BLEInformation.deviceId,
      serviceId: app.BLEInformation.notifyServiceId,
      characteristicId: app.BLEInformation.notifyCharaterId,
      state: true,
      success: function (res) {
        wx.onBLECharacteristicValueChange(function (r) {
          console.log(
            `characteristic ${r.characteristicId} has changed, now is ${r}`
          );
          var result = ab2hex(r.value);
          console.log("返回" + result);
          var tip = "";
          if (result == 12) {
            //正常
            tip = "正常";
          } else if (result == 32) {
            //缺纸
            tip = "缺纸";
          } else if (result == 36) {
            //开盖、缺纸
            tip = "开盖、缺纸";
          } else if (result == 16) {
            tip = "开盖";
          } else if (result == 40) {
            //其他错误
            tip = "其他错误";
          } else {
            //未处理错误
            tip = "未知错误";
          }
          wx.showModal({
            title: "打印机状态",
            content: tip,
            showCancel: false,
          });
        });
      },
      fail: function (e) {
        wx.showModal({
          title: "打印机状态",
          content: "获取失败重新进行蓝牙配对",
          showCancel: false,
        });
        console.log(e);
      },
      complete: function (e) {
        that.setData({
          isQuery: false,
        });
        console.log("执行完成");
      },
    });
  },

  receiptTest: function () {
    //票据测试
    var that = this;

    var command = esc.jpPrinter.createNew();
    command.init(); //初始化打印机
    command.setSelectJustification(1); //居中
    command.setCharacterSize(17); //设置倍高倍宽
    command.setText("票据测试");
    command.setPrint(); //打印并换行
    command.setCharacterSize(0); //设置正常大小
    command.setSelectJustification(0); //设置居左
    command.setText("打印对齐方式测试：");
    command.setPrint(); //打印并换行
    command.setSelectJustification(0); //设置居左
    command.setText("居左");
    command.setPrint(); //打印并换行
    command.setSelectJustification(1); //设置居中
    command.setText("居中");
    command.setPrint();
    command.setSelectJustification(2);
    command.setText("居右");
    command.setPrint();
    command.setSelectJustification(0);
    command.setText("同行打印位置测试：");
    command.setPrint();
    command.setText("居左");
    command.setAbsolutePrintPosition(168);
    command.setText("居中");
    command.setAbsolutePrintPosition(336);
    command.setText("居右");
    command.setPrint();
    command.init(); //初始化打印机
    command.setPrint();
    command.setText("条码打印");
    command.setPrint();
    command.setHRIPosition(2); //设置HRI位置
    command.setHRIFont(0); //HRI字体大小
    command.setBarcodeHeight(60); //条码高度
    command.setBarcodeWidth(2); //设置条码宽度
    command.setAbsolutePrintPosition(24);
    command.setCode128("{A12345678"); //code128  A类型
    command.setPrint();
    command.setText("二维码测试:");
    command.setPrint();
    command.setSelectSizeOfModuleForQRCode(5);
    command.setSelectErrorCorrectionLevelForQRCode(49);
    command.setStoreQRCodeData("http://www.howbest.cn/cn/");
    command.setPrintQRCode();
    command.setPrint();
    command.setPrint();
    command.setPrint();
    command.setPrint();
    that.prepareSend(command.getData()); //准备发送数据
  },
  prepareSend: function (buff) {
    //准备发送，根据每次发送字节数来处理分包数量
    //console.log(buff)
    var that = this;
    var time = that.data.oneTimeData;
    var looptime = parseInt(buff.length / time);
    var lastData = parseInt(buff.length % time);
    //console.log(looptime + "---" + lastData)
    that.setData({
      looptime: looptime + 1,
      lastData: lastData,
      currentTime: 1,
    });
    that.Send(buff);
  },
  Send: function (buff) {
    //分包发送
    var that = this;
    var currentTime = that.data.currentTime;
    var loopTime = that.data.looptime;
    var lastData = that.data.lastData;
    var onTimeData = that.data.oneTimeData;
    var printNum = that.data.printerNum;
    var currentPrint = that.data.currentPrint;
    var buf;
    var dataView;
    if (currentTime < loopTime) {
      buf = new ArrayBuffer(onTimeData);
      dataView = new DataView(buf);
      for (var i = 0; i < onTimeData; ++i) {
        dataView.setUint8(i, buff[(currentTime - 1) * onTimeData + i]);
      }
    } else {
      buf = new ArrayBuffer(lastData);
      dataView = new DataView(buf);
      for (var i = 0; i < lastData; ++i) {
        dataView.setUint8(i, buff[(currentTime - 1) * onTimeData + i]);
      }
    }
    //console.log("第" + currentTime + "次发送数据大小为：" + buf.byteLength)
    wx.writeBLECharacteristicValue({
      deviceId: app.BLEInformation.deviceId,
      serviceId: app.BLEInformation.writeServiceId,
      characteristicId: app.BLEInformation.writeCharaterId,
      value: buf,
      success: function (res) {
        if (currentTime <= loopTime) {
        } else {
          wx.showToast({
            title: "已打印成功",
          });
        }
        console.log(res);
      },
      fail: function (e) {
        wx.showToast({
          title: "打印测试失败",
          icon: "none",
        });
        console.log(e);
      },
      complete: function () {
        currentTime++;
        if (currentTime <= loopTime) {
          that.setData({
            currentTime: currentTime,
          });
          that.Send(buff);
        } else {
          if (currentPrint == printNum) {
            that.setData({
              looptime: 0,
              lastData: 0,
              currentTime: 1,
              isReceiptSend: false,
              currentPrint: 1,
            });
          } else {
            currentPrint++;
            that.setData({
              currentPrint: currentPrint,
              currentTime: 1,
            });
            that.Send(buff);
          }
        }
      },
    });
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    app.BLEInformation.platform = app.getPlatform();
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 页面显示时读取本地存储的 shopPosition
    const savedShopPosition = wx.getStorageSync("shopPosition");
    if (savedShopPosition !== "") {
      let shopPositionStr = "";
      if (savedShopPosition === "0") {
        shopPositionStr = "椒麻鸡花溪路店";
      } else if (savedShopPosition === "1") {
        shopPositionStr = "椒麻鸡大宁店";
      }
      this.setData({
        shopPosition: savedShopPosition,
        shopPositionStr: shopPositionStr,
      });
    }
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    var list = [];
    var numList = [];
    var j = 0;
    for (var i = 20; i < 200; i += 10) {
      list[j] = i;
      j++;
    }
    for (var i = 1; i < 10; i++) {
      numList[i - 1] = i;
    }
    this.setData({
      buffSize: list,
      oneTimeData: list[0],
      printNum: numList,
      printerNum: numList[0],
    });
  },
});
